/**
 * 安全的JSON解析工具函数
 */

/**
 * 安全解析JSON字符串
 * @param {string} jsonString - 要解析的JSON字符串
 * @param {any} defaultValue - 解析失败时的默认值
 * @returns {any} 解析结果或默认值
 */
export function safeJsonParse(jsonString, defaultValue = null) {
  try {
    // 检查是否为字符串类型
    if (typeof jsonString !== 'string') {
      console.warn('safeJsonParse: 输入不是字符串类型', typeof jsonString, jsonString)
      return defaultValue
    }

    // 检查是否为空字符串
    if (jsonString.trim() === '') {
      return defaultValue
    }

    return JSON.parse(jsonString)
  } catch (error) {
    console.warn('safeJsonParse: JSON解析失败', error.message, jsonString)
    return defaultValue
  }
}

/**
 * 安全的localStorage获取并解析JSON
 * @param {string} key - localStorage的键
 * @param {any} defaultValue - 默认值
 * @returns {any} 解析结果或默认值
 */
export function getLocalStorageJson(key, defaultValue = null) {
  try {
    const item = localStorage.getItem(key)
    if (item === null) {
      return defaultValue
    }
    return safeJsonParse(item, defaultValue)
  } catch (error) {
    console.warn('getLocalStorageJson: localStorage获取失败', error.message, key)
    return defaultValue
  }
}

/**
 * 安全的localStorage设置JSON
 * @param {string} key - localStorage的键
 * @param {any} value - 要存储的值
 * @returns {boolean} 是否成功存储
 */
export function setLocalStorageJson(key, value) {
  try {
    const jsonString = JSON.stringify(value)
    localStorage.setItem(key, jsonString)
    return true
  } catch (error) {
    console.error('setLocalStorageJson: localStorage设置失败', error.message, key, value)
    return false
  }
}